Skip to content

Update CLI banner with FastMCP 3.0 notice#2766

Merged
jlowin merged 2 commits intomainfrom
update-cli-banner-main
Dec 27, 2025
Merged

Update CLI banner with FastMCP 3.0 notice#2766
jlowin merged 2 commits intomainfrom
update-cli-banner-main

Conversation

@jlowin
Copy link
Copy Markdown
Member

@jlowin jlowin commented Dec 27, 2025

Updating CLI with 3.0 message.

@marvin-context-protocol marvin-context-protocol Bot added enhancement Improvement to existing functionality. For issues and smaller PR improvements. cli Related to FastMCP CLI commands (run, dev, install) or CLI functionality. labels Dec 27, 2025
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Dec 27, 2025

Warning

Rate limit exceeded

@jlowin has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 14 minutes and 42 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between eab4023 and c7b30ef.

📒 Files selected for processing (1)
  • src/fastmcp/utilities/cli.py

Walkthrough

The log_server_banner function signature is simplified to accept only a server object instead of transport, host, port, and path parameters. In server.py, both run_stdio_async and run_http_async are updated to call the function with the server parameter alone. The function implementation in cli.py is refactored to display a simplified banner showing the server name and a deploy URL, along with a new v3 notice panel, removing the previous transport-specific branching logic and connection details.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description check ⚠️ Warning The description is minimal and lacks required template sections including detailed change explanation, issue reference, testing confirmation, and checklist items specified in the repository's template. Expand the description to include the issue number, detailed explanation of changes, confirmation of testing, and complete the required contributors and review checklists.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately reflects the main change - updating the CLI banner to include a FastMCP 3.0 notice, which aligns with the code changes removing transport details and adding a v3 notice panel.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

Warning

Review ran into problems

🔥 Problems

Git: Failed to clone repository. Please run the @coderabbitai full review command to re-trigger a full review. If the issue persists, set path_filters to include or exclude specific files.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
src/fastmcp/utilities/cli.py (1)

216-218: Consider removing commented code.

The info table construction looks correct, but line 217 contains commented-out code. Consider either removing it entirely or uncommenting it if the docs row should be displayed.

🔎 Proposed cleanup
 info_table.add_row("🖥", "Server:", Text(server.name, style="dim"))
-# info_table.add_row("📚", "Docs:", "https://gofastmcp.com")
 info_table.add_row("🚀", "Deploy free:", "https://fastmcp.cloud")
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7cb00c9 and eab4023.

📒 Files selected for processing (2)
  • src/fastmcp/server/server.py
  • src/fastmcp/utilities/cli.py
🧰 Additional context used
📓 Path-based instructions (1)
src/fastmcp/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

src/fastmcp/**/*.py: Python ≥ 3.10 with full type annotations required
Prioritize readable, understandable code - clarity over cleverness. Avoid obfuscated or confusing patterns even if shorter
Follow existing patterns and maintain consistency in code implementation
Be intentional about re-exports - don't blindly re-export everything to parent namespaces. Core types defining a module's purpose should be exported. Specialized features can live in submodules. Only re-export to fastmcp.* for most fundamental types
Never use bare except - be specific with exception types

Files:

  • src/fastmcp/utilities/cli.py
  • src/fastmcp/server/server.py
🧠 Learnings (1)
📚 Learning: 2025-12-25T15:53:07.646Z
Learnt from: CR
Repo: jlowin/fastmcp PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-25T15:53:07.646Z
Learning: Applies to tests/**/*.py : Pass FastMCP servers directly to clients for testing without network complexity; only use HTTP transport when explicitly testing network features

Applied to files:

  • src/fastmcp/server/server.py
🔇 Additional comments (6)
src/fastmcp/server/server.py (2)

2063-2063: LGTM!

The function call correctly uses the simplified signature, passing only the server parameter.


2128-2128: LGTM!

The function call correctly uses the simplified signature, consistent with the stdio transport implementation.

src/fastmcp/utilities/cli.py (4)

6-6: LGTM!

The import statement correctly removes Literal, which is no longer needed after simplifying the function signature.


200-201: LGTM!

The function signature is correctly simplified with proper type annotations, aligning with the PR's goal to streamline the banner display.


234-243: LGTM!

The v3 notice panel is well-implemented with clear messaging and actionable guidance for users. The styling is consistent with the main panel, and the message aligns perfectly with the PR objectives.


254-255: LGTM!

The final rendering correctly displays both the main panel and v3 notice panel with proper centering and spacing.

@marvin-context-protocol
Copy link
Copy Markdown
Contributor

Test Failure Analysis

Summary: The Windows Python 3.10 test is failing due to a timeout during OAuth provider initialization, not related to the banner changes in this PR.

Root Cause: The test tests/server/auth/providers/test_auth0.py::TestAuth0Provider::test_init_with_explicit_params times out after 5 seconds while initializing the DiskStore used by the OAuth provider. This is a Windows-specific issue with the diskcache library's SQLite connection, not caused by the CLI banner modifications.

Evidence:

  • ✅ All other platforms pass (Ubuntu Python 3.10, Ubuntu Python 3.13, integration tests)
  • ❌ Only Windows Python 3.10 fails
  • The timeout occurs in diskcache.core.py line 623 (_con method)
  • Stack trace shows: Auth0Provider.__init__ → OIDCProxy.__init__ → OAuthProxy.__init__ → DiskStore.__init__ → diskcache initialization

Suggested Solution: This is a known flaky test issue on Windows with diskcache. Options:

  1. Skip this specific test on Windows (recommended short-term fix)
  2. Use an in-memory store for tests instead of disk-based cache
  3. Increase timeout for Windows tests (not ideal, masks the underlying issue)
  4. Mock the DiskStore in auth provider tests to avoid filesystem operations
Detailed Analysis

Stack Trace

The timeout occurs during initialization:

File "test_auth0.py", line 47, in test_init_with_explicit_params
File "auth0.py", line 104, in __init__
File "oidc_proxy.py", line 378, in __init__  
File "oauth_proxy.py", line 820, in __init__
File "key_value/aio/stores/disk/store.py", line 81, in __init__
File "diskcache/core.py", line 591, in __init__
File "diskcache/core.py", line 648, in _sql
File "diskcache/core.py", line 623, in _con
++++++++++++++++++++++++++ Timeout ++++++++++++++++++++++++++

Why This Isn't Related to PR Changes

This PR only modifies:

  • log_server_banner() signature (removes transport parameters)
  • Banner display content (adds v3 notice)

The failing test doesn't call log_server_banner() at all - it's testing OAuth provider initialization.

Related Files
  • tests/server/auth/providers/test_auth0.py:47 - Failing test
  • src/fastmcp/server/auth/oauth_proxy.py:820 - OAuth proxy init that creates DiskStore
  • Windows-specific diskcache SQLite locking issue

@jlowin jlowin merged commit c5a61a7 into main Dec 27, 2025
10 of 11 checks passed
@jlowin jlowin deleted the update-cli-banner-main branch December 27, 2025 03:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli Related to FastMCP CLI commands (run, dev, install) or CLI functionality. enhancement Improvement to existing functionality. For issues and smaller PR improvements.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant